package com.itheima.thread.pool.demo02;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;

/**
 * 使用jdk中提供提供的线程池
 */
public class ThreadPoolDemo01 {

    public static void main(String[] args) throws InterruptedException {

        // 1. 获取线程池
        /**
         * 借助于Executors中的静态方法获取线程池：
         * ExecutorService newCachedThreadPool(): 	创建一个可缓存线程池，可灵活的去创建线程，并且灵活的回收线程，若无可回收，则新建线程。
         * 第一次向线程池中去提交任务，线程池会新创建一个线程去执行这个任务，当这个任务执行完毕以后，那么这个线程可以会回收，成为空闲状态，那么当我们再次
         * 向线程池中提交任务，如果线程池中存在空闲的线程，那么此时就不会新建线程；而是直接使用空闲线程；线程的空闲时间为60s
         *
         * 这个ExecutorService就可以看做是一个线程池
         *
         */
        ExecutorService executorService = Executors.newCachedThreadPool();

        // 2. 提交任务
        executorService.submit(new Runnable() {

            @Override
            public void run() {
                System.out.println(Thread.currentThread().getName() + "----任务执行了....");
            }

        }) ;

        // 让main线程休眠3s
        TimeUnit.SECONDS.sleep(3);

        executorService.submit(new Runnable() {

            @Override
            public void run() {
                System.out.println(Thread.currentThread().getName() + "----任务执行了....");
            }

        }) ;

        // 3. 关闭
        executorService.shutdown();

    }

}
